<?php

namespace Xin\LaravelFortify\Module;

use Xin\Capsule\WithConfig;

class ModuleParser
{
	use WithConfig;

	/**
	 * @var array
	 */
	protected $config = [
		'default' => 'web',
		'allow_list' => ['api', 'admin', 'web'],
	];


	/**
	 * @var string
	 */
	protected $default = 'web';

	/**
	 * @param array $config
	 */
	public function __construct(array $config)
	{
		$this->config = $config;
	}

	/**
	 * @param string $requestPath
	 * @return array
	 */
	public function parse(string $requestPath)
	{
		$module = $this->getDefault();
		$modulePath = $requestPath;

		if ($index = strpos($requestPath, '/')) {
			$module = substr($requestPath, 0, $index);
			if (in_array($module, self::getAllowList())) {
				$modulePath = substr($requestPath, $index + 1);
			} else {
				$module = self::getDefault();
			}
		} else {
			if (in_array($requestPath, self::getAllowList())) {
				$module = $requestPath;
				$modulePath = '';
			}
		}

		return [$module, $modulePath];
	}

	/**
	 * @return string
	 */
	public function getDefault()
	{
		return $this->getConfig('default', 'web');
	}

	/**
	 * @param string $module
	 * @return void
	 */
	public function setDefault(string $module)
	{
		$this->setConfig('default', $module);
	}

	/**
	 * @return array
	 */
	public function getAllowList()
	{
		return $this->getConfig('allow_list', []);
	}

	/**
	 * @param array $allowList
	 * @return void
	 */
	public function setAllowList($allowList)
	{
		$this->setConfig('allow_list', $allowList);
	}
}
